
package com.siashan.unipay4j.wx.model.transfer.newmodel;

import com.alibaba.fastjson.annotation.JSONField;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

/**
 * 发起商家转账
 *
 * @author siashan
 * @date 2024-06-22
 */
@Getter
@Setter
@NoArgsConstructor
public class WxTransferNewNotifyResponse {


    /**
     * 商家单号
     * <p>
     * 商户系统内部的商家单号，要求此参数只能由数字、大小写字母组成，在商户系统内部唯一
     */
    @JSONField(name = "out_bill_no")
    private String outBillNo;

    /**
     * 微信转账单号
     * <p>
     * 微信转账单号，微信商家转账系统返回的唯一标识
     */
    @JSONField(name = "transfer_bill_no")
    private String transferBillNo;
    /**
     * 单据状态
     * <p>
     * ACCEPTED: 转账已受理
     * <p>
     * PROCESSING: 转账锁定资金中。如果一直停留在该状态，建议检查账户余额是否足够，如余额不足，可充值后再原单重试。
     * <p>
     * WAIT_USER_CONFIRM: 待收款用户确认，可拉起微信收款确认页面进行收款确认
     * <p>
     * TRANSFERING: 转账中，可拉起微信收款确认页面再次重试确认收款
     * <p>
     * SUCCESS: 转账成功
     * <p>
     * FAIL: 转账失败
     * <p>
     * CANCELING: 商户撤销请求受理成功，该笔转账正在撤销中
     * <p>
     * CANCELLED: 转账撤销完成
     *
     * @see WxTransferStateEnum
     */
    @JSONField(name = "state")
    private String state;
    /**
     * 商户号
     * <p>
     * 微信支付分配的商户号
     */
    @JSONField(name = "mch_id")
    private String mchId;
    /**
     * 转账金额
     * <p>
     * 转账金额单位为“分”
     */
    @JSONField(name = "transfer_amount")
    private Integer transferAmount;
    /**
     * 收款用户OpenID
     * <p>
     * 用户在商户appid下的唯一标识。发起转账前需获取到用户的OpenID，获取方式详见参数说明。
     */
    @JSONField(name = "openid")
    private String openid;


    /**
     * 失败原因
     * <p>
     * 选填
     * <p>
     * 订单已失败或者已退资金时，会返回订单失败原因
     */
    @JSONField(name = "fail_reason")
    private String failReason;
    /**
     * 单据创建时间
     * <p>
     * 必填
     * <p>
     * 单据受理成功时返回，按照使用rfc3339所定义的格式，格式为yyyy-MM-DDThh:mm:ss+TIMEZONE
     */
    @JSONField(name = "create_time")
    private String createTime;

    /**
     * 最后一次状态变更时间
     * <p>
     * 必填
     * <p>
     * 单据最后更新时间，按照使用rfc3339所定义的格式，格式为yyyy-MM-DDThh:mm:ss+TIMEZONE
     */
    @JSONField(name = "update_time")
    private String updateTime;


}
